// 导入 SillyTavern 模块
import { extension_settings } from '../../../extensions.js';
import { saveSettingsDebounced } from '../../../../script.js';

const extensionName = "delete"; // 必须与插件文件夹名称一致
const DATABASES_TO_DELETE = ["ST_ChatBackup", "ST_ChatAutoBackup"]; // 要删除的数据库列表

// 插件的默认设置
const defaultSettings = {
    hasRunCleanup: false, // 标记是否已执行过清理操作
};

// 加载插件设置
async function loadPluginSettings() {
    // 确保插件的设置对象存在于全局 extension_settings 中
    extension_settings[extensionName] = extension_settings[extensionName] || {};
    // 合并默认设置，确保所有设置项都有值 (已有的设置不会被覆盖)
    Object.assign(extension_settings[extensionName], {
        ...defaultSettings, // 先放默认值
        ...extension_settings[extensionName], // 再放用户已保存的值
    });
}

// 删除 IndexedDB 数据库的函数
function deleteIndexedDB(dbName) {
    return new Promise((resolve, reject) => {
        console.log(`[${extensionName}] 尝试删除 IndexedDB 数据库: ${dbName}`);
        const deleteRequest = window.indexedDB.deleteDatabase(dbName);

        deleteRequest.onsuccess = function () {
            console.log(`[${extensionName}] IndexedDB 数据库 "${dbName}" 删除成功或不存在。`);
            resolve(true);
        };

        deleteRequest.onerror = function (event) {
            console.error(`[${extensionName}] 删除 IndexedDB 数据库 "${dbName}" 失败:`, event.target.error);
            reject(event.target.error);
        };

        deleteRequest.onblocked = function () {
            // 这通常发生在数据库仍有活动连接时。
            console.warn(`[${extensionName}] 删除 IndexedDB 数据库 "${dbName}" 被阻止。请确保没有其他标签页正在使用此数据库，然后刷新。`);
            reject(new Error(`删除数据库 ${dbName} 被阻止。`));
        };
    });
}

// 插件主逻辑
jQuery(async () => {
    console.log(`[${extensionName}] 插件加载中...`);

    await loadPluginSettings();

    const settings = extension_settings[extensionName];

    if (!settings.hasRunCleanup) {
        console.log(`[${extensionName}] 检测到首次运行 (或清理操作未完成)。准备删除指定的数据库。`);
        let allOperationsSuccessful = true; // 标记所有删除操作是否都成功

        for (const dbName of DATABASES_TO_DELETE) {
            try {
                await deleteIndexedDB(dbName);
                // deleteIndexedDB 会在数据库不存在时也 resolve，这对于我们的目标是可接受的
            } catch (error) {
                // 错误已在 deleteIndexedDB 中打印
                // console.error(`[${extensionName}] 删除数据库 "${dbName}" 过程中发生错误，下次加载时将重试该操作:`, error);
                allOperationsSuccessful = false;
                // 如果一个失败，我们仍然尝试删除其他的，但整体操作将被标记为未完成
            }
        }

        if (allOperationsSuccessful) {
            settings.hasRunCleanup = true;
            saveSettingsDebounced(); // 保存设置，标记已运行
            console.log(`[${extensionName}] 所有指定的数据库清理操作完成，标记已运行。建议刷新页面以确保更改生效。`);
        } else {
            console.warn(`[${extensionName}] 部分或全部数据库清理操作失败。清理标志将保持为“未运行”，以便下次启动时重试。`);
            // settings.hasRunCleanup 保持 false，以便下次重试
        }

    } else {
        console.log(`[${extensionName}] 指定的数据库清理操作先前已执行过，本次跳过。`);
    }

    console.log(`[${extensionName}] 插件初始化完成。`);
});